package com.chinaunicom.customize;

import org.springframework.beans.factory.support.DefaultListableBeanFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * @author liry
 * @version 1.0
 * @date Created on 2022/1/12 15:57
 * Description: 自定义 ApplicationiContext
 */
public class MyClassPathXmlApplicationContext extends ClassPathXmlApplicationContext {

    // 一定要进行初始化
    public MyClassPathXmlApplicationContext(String... configLocations){
        super(configLocations);
    }


    /**
     * 初始化相关的属性
     */
    @Override
    protected void initPropertySources() {
        getEnvironment().setRequiredProperties("username");
        getEnvironment().validateRequiredProperties();
    }

    /**
     * 定制化 BeanFactory
     * @param beanFactory
     */
    @Override
    protected void customizeBeanFactory(DefaultListableBeanFactory beanFactory) {
        // TODO: 具体实现 BeanFactory 的定制化操作

        //　TODO: allowBeanDefinitionOverriding 是否允许相同 beanName的不同类型对象进行覆盖，默认为 true
        // 如果使用 lokup-method、replace-method 属性时，需要将上述参数 allowBeanDefinitionOverriding 置为true
        super.setAllowBeanDefinitionOverriding(false);
        super.setAllowCircularReferences(false);
        super.customizeBeanFactory(beanFactory);
    }
}
